00001
00002
00003
00004 #ifndef MEMDC_H
00005 #define MEMDC_H
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 class CMemDC : public CDC
00024 {
00025 public:
00026
00027
00028 CMemDC(CDC* pDC) : CDC()
00029 {
00030 ASSERT(pDC != NULL);
00031
00032 m_pDC = pDC;
00033 m_pOldBitmap = NULL;
00034 m_bMemDC = !pDC->IsPrinting();
00035
00036 if (m_bMemDC)
00037 {
00038 pDC->GetClipBox(&m_rect);
00039 CreateCompatibleDC(pDC);
00040 m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
00041 m_pOldBitmap = SelectObject(&m_bitmap);
00042 SetWindowOrg(m_rect.left, m_rect.top);
00043 }
00044 else
00045 {
00046 m_bPrinting = pDC->m_bPrinting;
00047 m_hDC = pDC->m_hDC;
00048 m_hAttribDC = pDC->m_hAttribDC;
00049 }
00050 }
00051
00052
00053 ~CMemDC()
00054 {
00055 if (m_bMemDC)
00056 {
00057
00058 m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
00059 this, m_rect.left, m_rect.top, SRCCOPY);
00060
00061
00062 SelectObject(m_pOldBitmap);
00063 } else {
00064
00065
00066
00067 m_hDC = m_hAttribDC = NULL;
00068 }
00069 }
00070
00071
00072 CMemDC* operator->() {return this;}
00073
00074
00075 operator CMemDC*() {return this;}
00076
00077 private:
00078 CBitmap m_bitmap;
00079 CBitmap* m_pOldBitmap;
00080 CDC* m_pDC;
00081 CRect m_rect;
00082 BOOL m_bMemDC;
00083 };
00084
00085
00086
00087
00088
00089
00090 #endif //MEMDC_H